﻿<!--***********************************************************************************

   Extended WPF Toolkit

   Copyright (C) 2007-2013 Xceed Software Inc.

   This program is provided to you under the terms of the Microsoft Public
   License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license 

   For more features, controls, and fast professional support,
   pick up the Plus Edition at http://xceed.com/wpf_toolkit

   Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids

  **********************************************************************************-->

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:Xceed.Wpf.Toolkit"
                    xmlns:pg="clr-namespace:Xceed.Wpf.Toolkit.PropertyGrid"
                    xmlns:conv="clr-namespace:Xceed.Wpf.Toolkit.Core.Converters"
                    xmlns:editor="clr-namespace:Xceed.Wpf.Toolkit.PropertyGrid.Editors"
                    xmlns:pgconv="clr-namespace:Xceed.Wpf.Toolkit.PropertyGrid.Converters"
                    xmlns:utilities="clr-namespace:Xceed.Wpf.Toolkit.Core.Utilities"
                    xmlns:commands="clr-namespace:Xceed.Wpf.Toolkit.PropertyGrid.Commands"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib">

    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="../../NumericUpDown/Themes/Generic.xaml" />
       <ResourceDictionary Source="../../DateTimeUpDown/Themes/Generic.xaml" />
       <ResourceDictionary Source="../../WatermarkTextBox/Themes/Generic.xaml" />
        <ResourceDictionary Source="../../ColorPicker/Themes/Generic.xaml" />
    </ResourceDictionary.MergedDictionaries>

   <!-- =============================================================================== -->
   <!-- PropertyGrid                                                                    -->
   <!-- =============================================================================== -->

   <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
   <conv:InverseBoolConverter x:Key="InverseBoolConverter" />
   <pgconv:ExpandableObjectMarginConverter x:Key="ExpandableObjectMarginConverter" />

   <x:Static x:Key="EmptyString" Member="sys:String.Empty" />

    <!-- PropertyGrid numeric Editors -->  
   <Style TargetType="{x:Type editor:PropertyGridEditorByteUpDown}" BasedOn="{StaticResource NumericUpDown}">
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <Style TargetType="{x:Type editor:PropertyGridEditorDecimalUpDown}" BasedOn="{StaticResource NumericUpDown}">
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <Style TargetType="{x:Type editor:PropertyGridEditorDoubleUpDown}" BasedOn="{StaticResource NumericUpDown}" >
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <Style TargetType="{x:Type editor:PropertyGridEditorIntegerUpDown}" BasedOn="{StaticResource NumericUpDown}" >
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <Style TargetType="{x:Type editor:PropertyGridEditorLongUpDown}" BasedOn="{StaticResource NumericUpDown}" >
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <Style TargetType="{x:Type editor:PropertyGridEditorShortUpDown}" BasedOn="{StaticResource NumericUpDown}" >
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <Style TargetType="{x:Type editor:PropertyGridEditorSingleUpDown}" BasedOn="{StaticResource NumericUpDown}" >
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <!-- PropertyGrid DateTime Editors --> 
   <Style TargetType="{x:Type editor:PropertyGridEditorDateTimeUpDown}" BasedOn="{StaticResource DateTimeUpDown}" >
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <!-- PropertyGrid ComboBox Editors --> 
   <Style TargetType="{x:Type editor:PropertyGridEditorComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}" >
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="Background" Value="Transparent" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <!-- PropertyGrid CheckBox Editors --> 
   <Style TargetType="{x:Type editor:PropertyGridEditorCheckBox}" BasedOn="{StaticResource {x:Type CheckBox}}" >
      <Setter Property="Margin" Value="5,0,0,0" />
   </Style>

   <!-- PropertyGrid TextBox Editors --> 
   <Style TargetType="{x:Type editor:PropertyGridEditorTextBox}" BasedOn="{StaticResource WatermarkTextBox}" >
       <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

    <!-- PropertyGrid TextBlock Editors --> 
   <Style TargetType="{x:Type editor:PropertyGridEditorTextBlock}" BasedOn="{StaticResource {x:Type TextBlock}}" />

   <!-- PropertyGrid ColorPicker Editors --> 
   <Style TargetType="{x:Type editor:PropertyGridEditorColorPicker}" BasedOn="{StaticResource {x:Type local:ColorPicker}}" >
       <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowDropDownButton" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <!-- ===============================================================================   -->
   <!-- Style for all internal derived types of NumericUpDown will be done in code-behind -->
   <!-- for external themes to redefine the default style. The reason is that the         -->
   <!-- toolkit.dll uses the InternalsVisibleTo attribute which makes internal data only  -->
   <!-- available in code-behind(not xaml).                                               -->        
   <!-- (ex. Office2007 theme)                                                            -->
   <!-- ===============================================================================   -->  

   <!-- Internal PropertyGrid numeric Editors -->  
   <Style TargetType="{x:Type editor:PropertyGridEditorSByteUpDown}" BasedOn="{StaticResource NumericUpDown}" >
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <Style TargetType="{x:Type editor:PropertyGridEditorUIntegerUpDown}" BasedOn="{StaticResource NumericUpDown}" >
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <Style TargetType="{x:Type editor:PropertyGridEditorULongUpDown}" BasedOn="{StaticResource NumericUpDown}" >
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>

   <Style TargetType="{x:Type editor:PropertyGridEditorUShortUpDown}" BasedOn="{StaticResource NumericUpDown}" >
      <Style.Triggers>
         <MultiTrigger>
            <MultiTrigger.Conditions>
               <Condition Property="IsKeyboardFocusWithin" Value="False"/>
               <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="Transparent" />
            <Setter Property="ShowButtonSpinner" Value="False" />
         </MultiTrigger>
      </Style.Triggers>
   </Style>



   <SolidColorBrush x:Key="MouseOverBorderBrush" Color="#FFFFB700" />
   <LinearGradientBrush x:Key="MouseOverBackgroundBrush" StartPoint="0,0" EndPoint="0,1">
      <GradientStop Offset="0" Color="#FFFEFBF4" />
      <GradientStop Offset="0.19" Color="#FFFDE7CE" />
      <GradientStop Offset="0.39" Color="#FFFDDEB8" />
      <GradientStop Offset="0.39" Color="#FFFFCE6B" />
      <GradientStop Offset="0.79" Color="#FFFFDE9A" />
      <GradientStop Offset="1" Color="#FFFFEBAA" />
   </LinearGradientBrush>

   <SolidColorBrush x:Key="CheckedBorderBrush" Color="#FFC29B29" />
   <LinearGradientBrush x:Key="CheckedBackgroundBrush" StartPoint="0,0" EndPoint="0,1">
      <GradientStop Offset="0" Color="#FFFFDCA0" />
      <GradientStop Offset="0.18" Color="#FFFFD692" />
      <GradientStop Offset="0.39" Color="#FFFFC45D" />
      <GradientStop Offset="1" Color="#FFFFD178" />
   </LinearGradientBrush>

   <SolidColorBrush x:Key="PressedBorderBrush" Color="#FFC29B29" />
   <LinearGradientBrush x:Key="PressedBackgroundBrush" StartPoint="0,0" EndPoint="0,1">
      <GradientStop Offset="0" Color="#FFE3C085" />
      <GradientStop Offset="0.19" Color="#FFF4CC89" />
      <GradientStop Offset="0.36" Color="#FFF5C777" />
      <GradientStop Offset="0.36" Color="#FFF5BB56" />
      <GradientStop Offset="0.79" Color="#FFF4CE9A" />
      <GradientStop Offset="1" Color="#FFF3E28D" />
   </LinearGradientBrush>

   <Style x:Key="OptionsToggleButtonStyle" TargetType="{x:Type RadioButton}">
      <Setter Property="Background" Value="Transparent" />
      <Setter Property="BorderBrush" Value="Transparent" />
      <Setter Property="BorderThickness" Value="1" />
      <Setter Property="FocusVisualStyle" Value="{x:Null}" />
      <Setter Property="Height" Value="22" />
      <Setter Property="HorizontalContentAlignment" Value="Center" />
      <Setter Property="ToolTipService.InitialShowDelay" Value="900" />
      <Setter Property="ToolTipService.ShowDuration" Value="20000" />
      <Setter Property="ToolTipService.BetweenShowDelay" Value="0" />
      <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate TargetType="{x:Type RadioButton}">
               <Grid SnapsToDevicePixels="True">
                  <Border x:Name="OuterBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="2" />
                  <Border x:Name="MiddleBorder" BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" CornerRadius="2">
                     <Border x:Name="InnerBorder" BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" CornerRadius="2" Padding="{TemplateBinding Padding}">
                        <StackPanel x:Name="StackPanel" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
                           <ContentPresenter x:Name="Content"
                                             Content="{TemplateBinding Content}"
                                             Margin="1"
                                             RenderOptions.BitmapScalingMode="NearestNeighbor"
                                             VerticalAlignment="Center"
                                             HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
                        </StackPanel>
                     </Border>
                  </Border>
               </Grid>
               <ControlTemplate.Triggers>
                  <Trigger Property="IsMouseOver" Value="True">
                     <Setter Property="Background" TargetName="OuterBorder" Value="{StaticResource MouseOverBackgroundBrush}" />
                     <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{StaticResource MouseOverBorderBrush}" />
                     <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF" />
                  </Trigger>

                  <Trigger Property="IsEnabled" Value="False">
                     <Setter Property="Opacity" TargetName="Content" Value="0.5" />
                     <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="#FF9E9E9E" />
                  </Trigger>

                  <Trigger Property="IsChecked" Value="True">
                     <Setter Property="Background" TargetName="OuterBorder" Value="{StaticResource CheckedBackgroundBrush}" />
                     <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{StaticResource CheckedBorderBrush}" />
                     <Setter Property="BorderBrush" TargetName="InnerBorder">
                        <Setter.Value>
                           <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                              <GradientStop Color="#FFE7CBAD" Offset="0" />
                              <GradientStop Color="#FFF7D7B5" Offset="0.1" />
                              <GradientStop Color="#FFFFD38C" Offset="0.36" />
                              <GradientStop Color="#FFFFC75A" Offset="0.36" />
                              <GradientStop Color="#FFFFEFA5" Offset="1" />
                           </LinearGradientBrush>
                        </Setter.Value>
                     </Setter>
                  </Trigger>

                  <Trigger Property="IsPressed" Value="True">
                     <Setter Property="Background" TargetName="OuterBorder" Value="{StaticResource PressedBackgroundBrush}" />
                     <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{StaticResource PressedBorderBrush}" />
                     <Setter Property="BorderBrush" TargetName="InnerBorder" Value="Transparent" />
                  </Trigger>

                  <MultiTrigger>
                     <MultiTrigger.Conditions>
                        <Condition Property="IsChecked" Value="True" />
                        <Condition Property="IsMouseOver" Value="True" />
                     </MultiTrigger.Conditions>
                     <Setter Property="Background" TargetName="MiddleBorder">
                        <Setter.Value>
                           <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                              <GradientStop Color="#40FFFEFE" Offset="0" />
                              <GradientStop Color="#40FFFEFE" Offset="0.39" />
                              <GradientStop Color="#20FFCE68" Offset="0.39" />
                              <GradientStop Color="#20FFCE68" Offset="0.69" />
                              <GradientStop Color="#10FFFFFF" Offset="1" />
                           </LinearGradientBrush>
                        </Setter.Value>
                     </Setter>
                  </MultiTrigger>
               </ControlTemplate.Triggers>
            </ControlTemplate>
         </Setter.Value>
      </Setter>
   </Style>

   <Style x:Key="ClearFilterButtonStyle" TargetType="{x:Type Button}">
      <Setter Property="Background" Value="Transparent" />
      <Setter Property="BorderBrush" Value="Transparent" />
      <Setter Property="BorderThickness" Value="1" />
      <Setter Property="Height" Value="22" />
      <Setter Property="HorizontalContentAlignment" Value="Center" />
      <Setter Property="ToolTipService.InitialShowDelay" Value="900" />
      <Setter Property="ToolTipService.ShowDuration" Value="20000" />
      <Setter Property="ToolTipService.BetweenShowDelay" Value="0" />
      <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
               <Grid SnapsToDevicePixels="True">
                  <Border x:Name="OuterBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="2" />
                  <Border x:Name="MiddleBorder" BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" CornerRadius="2">
                     <Border x:Name="InnerBorder" BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" CornerRadius="2" Padding="{TemplateBinding Padding}">
                        <StackPanel x:Name="StackPanel" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
                           <ContentPresenter x:Name="Content"
                                             Content="{TemplateBinding Content}"
                                             Margin="1"
                                             RenderOptions.BitmapScalingMode="NearestNeighbor"
                                             VerticalAlignment="Center"
                                             HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
                        </StackPanel>
                     </Border>
                  </Border>
               </Grid>
               <ControlTemplate.Triggers>
                  <Trigger Property="IsMouseOver" Value="True">
                     <Setter Property="Background" TargetName="OuterBorder" Value="{StaticResource MouseOverBackgroundBrush}" />
                     <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{StaticResource MouseOverBorderBrush}" />
                     <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF" />
                  </Trigger>

                  <Trigger Property="IsEnabled" Value="False">
                     <Setter Property="Opacity" TargetName="Content" Value="0.5" />
                     <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="#FF9E9E9E" />
                  </Trigger>

                  <Trigger Property="IsPressed" Value="True">
                     <Setter Property="Background" TargetName="OuterBorder" Value="{StaticResource PressedBackgroundBrush}" />
                     <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{StaticResource PressedBorderBrush}" />
                     <Setter Property="BorderBrush" TargetName="InnerBorder" Value="Transparent" />
                  </Trigger>
               </ControlTemplate.Triggers>
            </ControlTemplate>
         </Setter.Value>
      </Setter>
   </Style>

   <SolidColorBrush x:Key="GlyphBrush" Color="#FF31347C" />

   <ControlTemplate x:Key="ExpanderToggleButton" TargetType="{x:Type ToggleButton}">
      <Grid>
         <Rectangle Margin="0,0,0,0" x:Name="Rectangle" Fill="Transparent" />
         <Path HorizontalAlignment="Center" x:Name="Up_Arrow" VerticalAlignment="Center" Fill="{StaticResource GlyphBrush}" Data="M 0 0 L 4 4 L 8 0 Z" RenderTransformOrigin="0.5,0.5">
            <Path.RenderTransform>
               <TransformGroup>
                  <ScaleTransform ScaleX="1" ScaleY="1" />
                  <SkewTransform AngleX="0" AngleY="0" />
                  <RotateTransform Angle="-90" />
                  <TranslateTransform X="0" Y="0" />
               </TransformGroup>
            </Path.RenderTransform>
         </Path>
         <Path Visibility="Collapsed" HorizontalAlignment="Center" x:Name="Down_Arrow" VerticalAlignment="Center" Fill="{StaticResource GlyphBrush}" Data="M 0 4 L 4 0 L 8 4 Z" RenderTransformOrigin="0.5,0.5">
            <Path.RenderTransform>
               <TransformGroup>
                  <ScaleTransform ScaleX="1" ScaleY="1" />
                  <SkewTransform AngleX="0" AngleY="0" />
                  <RotateTransform Angle="135" />
                  <TranslateTransform X="0" Y="0" />
               </TransformGroup>
            </Path.RenderTransform>
         </Path>
      </Grid>
      <ControlTemplate.Triggers>
         <Trigger Property="IsChecked" Value="true">
            <Setter Property="Visibility" Value="Visible" TargetName="Down_Arrow" />
            <Setter Property="Visibility" Value="Collapsed" TargetName="Up_Arrow" />
            <Setter Property="OpacityMask" TargetName="Down_Arrow" Value="#FF000000" />
         </Trigger>
      </ControlTemplate.Triggers>
   </ControlTemplate>

   <Style x:Key="ExpanderStyle" TargetType="{x:Type Expander}">
      <Setter Property="Padding" Value="0" />
      <Setter Property="Background" Value="#FFF0F0F0" />
      <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate TargetType="{x:Type Expander}">
               <Grid>
                  <Grid.RowDefinitions>
                     <RowDefinition Height="Auto" />
                     <RowDefinition Height="*" x:Name="ContentRow" />
                  </Grid.RowDefinitions>
                  <Border x:Name="Border" Background="{TemplateBinding Background}" BorderBrush="#FFF0F0F0">
                     <Grid>
                        <Grid.ColumnDefinitions>
                           <ColumnDefinition Width="20" />
                           <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <ToggleButton Template="{StaticResource ExpanderToggleButton}" IsChecked="{Binding Path=IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" OverridesDefaultStyle="True" />
                        <ContentPresenter Grid.Column="1" Margin="1" RecognizesAccessKey="True" ContentSource="Header" TextElement.FontWeight="Bold" />
                     </Grid>
                  </Border>
                  <Border Visibility="Collapsed" Grid.Row="1" x:Name="ExpandSite" Background="{x:Static SystemColors.ControlBrush}" Padding="10 0 0 0">
                     <Border BorderThickness="0" Margin="0" Padding="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Focusable="False" />
                     </Border>
                  </Border>
               </Grid>
               <ControlTemplate.Triggers>
                  <Trigger Property="IsExpanded" Value="True">
                     <Setter Property="Visibility" Value="Visible" TargetName="ExpandSite" />
                  </Trigger>
               </ControlTemplate.Triggers>
            </ControlTemplate>
         </Setter.Value>
      </Setter>
   </Style>

   <Style x:Key="PropertyExpanderStyle" TargetType="{x:Type Expander}">
      <Setter Property="Padding" Value="10 0 0 0" />
      <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate TargetType="{x:Type Expander}">
               <Grid>
                  <Border Visibility="Collapsed" Grid.Row="1" x:Name="ExpandSite" Padding="0 0 0 0">
                     <Border BorderThickness="0" Margin="0" Padding="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
												      VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
												      Focusable="False"/>
                     </Border>
                  </Border>
               </Grid>
               <ControlTemplate.Triggers>
                  <Trigger Property="IsExpanded" Value="True">
                     <Setter Property="Visibility" Value="Visible" TargetName="ExpandSite" />
                  </Trigger>
               </ControlTemplate.Triggers>
            </ControlTemplate>
         </Setter.Value>
      </Setter>
   </Style>

   <ContextMenu x:Key="{ComponentResourceKey 
                  TypeInTargetAssembly={x:Type pg:PropertyGrid}, 
                  ResourceId=SelectedObjectAdvancedOptionsMenu}">
      <MenuItem Header="Reset Value" Command="commands:PropertyItemCommands.ResetValue" />
   </ContextMenu>

   <Style TargetType="{x:Type pg:PropertyItemBase}">
      <Setter Property="Background" Value="{x:Static SystemColors.WindowBrush}" />
      <!-- Set the margin at 1 pixel bottom to let the horizontal "line" effect appear. -->
      <Setter Property="Margin" Value="0,0,0,1" />
      <Setter Property="VerticalContentAlignment" Value="Center" />
      <Setter Property="SnapsToDevicePixels" Value="True"/>
      <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate TargetType="{x:Type pg:PropertyItemBase}">
               <Border ContextMenu="{Binding AdvancedOptionsMenu, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=pg:PropertyGrid}}" 
                       ContextMenuService.Placement="Bottom">
                  <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
                     <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="{Binding NameColumnWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type pg:PropertyGrid}}}" />
                        <ColumnDefinition Width="*" />
                     </Grid.ColumnDefinitions>
                     <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition Height="Auto" />
                     </Grid.RowDefinitions>

                     <!-- Set the BorderThickness at 1 pixel to the right to let the "vertical line" appear -->
                     <Border x:Name="PART_Name"
                             Background="{TemplateBinding Background}" 
                             Margin="0,0,1,0" 
                             VerticalAlignment="Stretch" 
                             HorizontalAlignment="Stretch">
                        <Grid Margin="2,2,2,2" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                           <Grid.ColumnDefinitions>
                              <ColumnDefinition Width="*" />
                              <ColumnDefinition Width="Auto" />
                           </Grid.ColumnDefinitions>

                           <Grid Margin="{Binding Level, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource ExpandableObjectMarginConverter}}">
                              <Grid.ColumnDefinitions>
                                 <ColumnDefinition Width="15" />
                                 <ColumnDefinition Width="*" />
                              </Grid.ColumnDefinitions>

                              <ToggleButton x:Name="_expandableButton"
                                            Grid.Column="0"
                                            Template="{StaticResource ExpanderToggleButton}"
                                            OverridesDefaultStyle="True"
                                            IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
                                            Visibility="{Binding IsExpandable, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}" />

                              <TextBlock Grid.Column="1" Text="{Binding DisplayName, RelativeSource={RelativeSource TemplatedParent}}" 
                                         HorizontalAlignment="Stretch" 
                                         VerticalAlignment="Center"
                                         TextTrimming="CharacterEllipsis" />
                           </Grid>

                           <Grid Grid.Column="1"
                                 HorizontalAlignment="Right"
                                 Margin="5,0,5,0"
                                 Visibility="{Binding ShowAdvancedOptions, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=pg:PropertyGrid}, Converter={StaticResource BooleanToVisibilityConverter}}"
                                 utilities:ContextMenuUtilities.OpenOnMouseLeftButtonClick="True"
                                 ContextMenu="{Binding AdvancedOptionsMenu, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=pg:PropertyGrid}}">

                                 <Image x:Name="_optionsImage"
                                          Width="11"
                                          Height="11"
                                          ToolTip="{Binding AdvancedOptionsTooltip, RelativeSource={RelativeSource TemplatedParent}}" />
                           </Grid>
                        </Grid>
                     </Border>

                     <Border x:Name="PART_Editor" Grid.Column="1" 
                           Background="{TemplateBinding Background}" 
                           KeyboardNavigation.DirectionalNavigation="None"
                           VerticalAlignment="Stretch" 
                           HorizontalAlignment="Stretch">
                        <ContentControl x:Name="PART_ValueContainer" 
                                          Content="{TemplateBinding Editor}" 
                                          Focusable="False" IsTabStop="False" 
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          IsEnabled="{Binding IsReadOnly, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=pg:PropertyGrid}, Converter={StaticResource InverseBoolConverter}}" >
                        </ContentControl>
                     </Border>

                     <Expander x:Name="_propertyExpander" Grid.ColumnSpan="2" Grid.Row="1" IsExpanded="{TemplateBinding IsExpanded}" Style="{StaticResource PropertyExpanderStyle}" IsEnabled="True">
                        <pg:PropertyItemsControl x:Name="PART_PropertyItemsControl" IsTabStop="False" Focusable="False"
                                                 ItemsSource="{Binding Properties, RelativeSource={RelativeSource TemplatedParent}}"
                                                 ItemContainerStyle="{Binding PropertyContainerStyle, RelativeSource={RelativeSource TemplatedParent}}">
                           <ItemsControl.ItemsPanel>
                              <ItemsPanelTemplate>
                                 <VirtualizingStackPanel />
                              </ItemsPanelTemplate>
                           </ItemsControl.ItemsPanel>
                        </pg:PropertyItemsControl>
                     </Expander>
                  </Grid>
               </Border>
               <ControlTemplate.Triggers>
                  <Trigger Property="IsMouseOver" Value="True">
                     <Setter TargetName="PART_Name" Property="Background" Value="#CED4DF" />
                  </Trigger>
                  <Trigger Property="IsSelected" Value="True">
                     <Setter TargetName="PART_Name" Property="Background" Value="#43577B" />
                     <Setter TargetName="PART_Name" Property="TextElement.Foreground" Value="White" />
                  </Trigger>
                  <Trigger Property="IsEnabled" Value="False">
                     <Setter Property="Foreground" TargetName="PART_ValueContainer"  Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"  />
                  </Trigger>
                  <Trigger Property="Validation.HasError" Value="true">
                        <Setter Property="ToolTip"
                                Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
                  </Trigger>
                   <Trigger Property="Visibility" Value="Visible" SourceName="_expandableButton">
                     <Setter Property="Focusable" Value="False" />
                  </Trigger>

                  <DataTrigger Binding="{Binding ElementName=_optionsImage, Path=ToolTip}" Value="{x:Static pg:StringConstants.Local}">
                     <Setter TargetName="_optionsImage" Property="Source" Value="../Images/Local11.png" />
                  </DataTrigger>
                  <DataTrigger Binding="{Binding ElementName=_optionsImage, Path=ToolTip}" Value="{x:Static pg:StringConstants.Resource}">
                     <Setter TargetName="_optionsImage" Property="Source" Value="../Images/Resource11.png" />
                  </DataTrigger>
                  <DataTrigger Binding="{Binding ElementName=_optionsImage, Path=ToolTip}" Value="{x:Static pg:StringConstants.Databinding}">
                     <Setter TargetName="_optionsImage" Property="Source" Value="../Images/Database11.png" />
                  </DataTrigger>
                  <DataTrigger Binding="{Binding ElementName=_optionsImage, Path=ToolTip}" Value="{x:Static pg:StringConstants.Inheritance}">
                     <Setter TargetName="_optionsImage" Property="Source" Value="../Images/Inheritance11.png" />
                  </DataTrigger>
                  <DataTrigger Binding="{Binding ElementName=_optionsImage, Path=ToolTip}" Value="{x:Static pg:StringConstants.StyleSetter}">
                     <Setter TargetName="_optionsImage" Property="Source" Value="../Images/Style11.png" />
                  </DataTrigger>
                  <DataTrigger Binding="{Binding ElementName=_optionsImage, Path=ToolTip}" Value="{x:Static pg:StringConstants.AdvancedProperties}">
                     <Setter TargetName="_optionsImage" Property="Source" Value="../Images/AdvancedProperties11.png" />
                  </DataTrigger>
               </ControlTemplate.Triggers>
            </ControlTemplate>
         </Setter.Value>
      </Setter>
   </Style>

   <Style TargetType="{x:Type pg:PropertyGrid}">
      <Style.Resources>
         <pgconv:SelectedObjectConverter x:Key="objectConverter" />
      </Style.Resources>
      <Setter Property="Background" Value="#BCC7D8" />
      <Setter Property="BorderBrush" Value="#43577B" />
      <Setter Property="BorderThickness" Value="1" />
      <Setter Property="SelectedObjectType" Value="{Binding RelativeSource={RelativeSource Self}, Path=SelectedObject, Converter={StaticResource objectConverter}, ConverterParameter=Type}" />
      <Setter Property="SelectedObjectTypeName" Value="{Binding RelativeSource={RelativeSource Self}, Path=SelectedObject, Converter={StaticResource objectConverter}, ConverterParameter=TypeName}" />
      <Setter Property="SelectedObjectName" Value="{Binding RelativeSource={RelativeSource Self}, Path=SelectedObject, Converter={StaticResource objectConverter}, ConverterParameter=SelectedObjectName}" />
        <Setter Property="Template">
         <Setter.Value>
            <ControlTemplate TargetType="{x:Type pg:PropertyGrid}">
               <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                  <Grid Margin="{TemplateBinding Padding}">
                     <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto" />
                        <RowDefinition />
                        <RowDefinition Height="5" />
                        <RowDefinition Height="Auto"/>
                     </Grid.RowDefinitions>

                     <StackPanel Orientation="Horizontal" Margin="6,2,0,4"
                                 Visibility="{Binding ShowTitle, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}">
                        <TextBlock Text="{TemplateBinding SelectedObjectTypeName}" FontWeight="Bold" />
                        <TextBlock Text="{TemplateBinding SelectedObjectName}" Margin="5,0,0,0" />
                     </StackPanel>

                     <Grid x:Name="toolsContainer" Grid.Row="1" Margin="4,0,4,4">
                        <Grid.ColumnDefinitions>
                           <ColumnDefinition Width="Auto" />
                           <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Grid x:Name="sortButtonContainer" Margin="4" Visibility="{Binding ShowSortOptions, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}">
                           <StackPanel Orientation="Horizontal" Margin="1" >
                              <RadioButton IsChecked="{Binding IsCategorized, RelativeSource={RelativeSource TemplatedParent}}"
                                           VerticalAlignment="Center"
                                           Style="{StaticResource OptionsToggleButtonStyle}"
                                           ToolTip="Categorized">
                                 <Image Source="./../Images/Categorize16.png" Width="16" Height="16" />
                              </RadioButton>
                              <RadioButton IsChecked="{Binding IsCategorized, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource InverseBoolConverter}, Mode=OneWay}"
                                           VerticalAlignment="Center"
                                           Style="{StaticResource OptionsToggleButtonStyle}"
                                           ToolTip="Alphabetical">
                                 <Image Source="./../Images/SortAscending16.png" Width="16" Height="16" />
                              </RadioButton>
                           </StackPanel>
                        </Grid>

                        <Border x:Name="searchBoxContainer" Grid.Column="1" Margin="4,4,0,4" Background="White" BorderBrush="Gray" BorderThickness="1" Visibility="{Binding ShowSearchBox, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}">
                           <Grid>
                              <Grid.ColumnDefinitions>
                                 <ColumnDefinition Width="*" />
                                 <ColumnDefinition Width="Auto" />
                              </Grid.ColumnDefinitions>
                              <local:WatermarkTextBox x:Name="_txtFilter"
                                                      Background="Transparent" 
                                                      Text="{Binding Filter, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged}"
                                                      Watermark="{TemplateBinding FilterWatermark}">
                                 <local:WatermarkTextBox.Style>
                                    <Style TargetType="Control">
                                       <Setter Property="BorderThickness" Value="0" />
                                       <Style.Triggers>
                                          <Trigger Property="IsMouseOver" Value="True">
                                             <Setter Property="BorderThickness" Value="1" />
                                          </Trigger>
                                       </Style.Triggers>
                                    </Style>
                                 </local:WatermarkTextBox.Style>

                              </local:WatermarkTextBox>

                              <Button Grid.Column="1"
                                      Command="commands:PropertyGridCommands.ClearFilter"
                                      Style="{StaticResource ClearFilterButtonStyle}"
                                      HorizontalAlignment="Left">
                                 <Image Source="./../Images/ClearFilter16.png" Width="16" Height="16" />
                              </Button>
                           </Grid>
                        </Border>
                     </Grid>

                     <Grid Grid.Row="2" Background="{x:Static SystemColors.WindowBrush}">
                        <ScrollViewer VerticalScrollBarVisibility="Auto" >
                           <pg:PropertyItemsControl  x:Name="PART_PropertyItemsControl" IsTabStop="False" Focusable="False"
                                                     ItemsSource="{Binding Properties, RelativeSource={RelativeSource TemplatedParent}}"
                                                     ItemContainerStyle="{Binding PropertyContainerStyle, RelativeSource={RelativeSource TemplatedParent}}"
                                                     Background="{x:Static SystemColors.ControlBrush}"
                                                     VerticalAlignment="Top">
                              <ItemsControl.ItemsPanel>
                                 <ItemsPanelTemplate>
                                    <VirtualizingStackPanel />
                                 </ItemsPanelTemplate>
                              </ItemsControl.ItemsPanel>

                              <ItemsControl.GroupStyle>
                                 <GroupStyle>
                                    <GroupStyle.ContainerStyle>
                                       <Style TargetType="{x:Type GroupItem}">
                                          <Setter Property="Template">
                                             <Setter.Value>
                                                <ControlTemplate>
                                                   <Border >
                                                      <Expander Header="{Binding Name}" Style="{StaticResource ExpanderStyle}" IsExpanded="True" >
                                                         <ItemsPresenter />
                                                      </Expander>
                                                   </Border>
                                                </ControlTemplate>
                                             </Setter.Value>
                                          </Setter>
                                       </Style>
                                    </GroupStyle.ContainerStyle>
                                 </GroupStyle>
                              </ItemsControl.GroupStyle>

                           </pg:PropertyItemsControl>
                        </ScrollViewer>

                         <Thumb x:Name="PART_DragThumb" HorizontalAlignment="Left" Width="5" Margin="6,0,0,0" Cursor="SizeWE">
                           <Thumb.Template>
                              <ControlTemplate>
                                 <Border Background="Transparent" />
                              </ControlTemplate>
                           </Thumb.Template>
                        </Thumb>

                     </Grid>

                     <GridSplitter Height="3" Grid.Row="3" HorizontalAlignment="Stretch" Visibility="{Binding ShowSummary, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}" />
                     <StackPanel Grid.Row="4" Margin="0,0,0,5" Visibility="{Binding ShowSummary, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}">
                        <TextBlock Padding="2 2 2 0" FontWeight="Bold" Text="{Binding SelectedPropertyItem.DisplayName, RelativeSource={RelativeSource TemplatedParent}}" />
                        <TextBlock Padding="5 2 2 0" TextWrapping="WrapWithOverflow" Text="{Binding SelectedPropertyItem.Description, RelativeSource={RelativeSource TemplatedParent}}" />
                     </StackPanel>
                  </Grid>
               </Border>
               <ControlTemplate.Triggers>
                  <MultiTrigger>
                     <MultiTrigger.Conditions>
                        <Condition SourceName="searchBoxContainer" Property="Visibility" Value="Collapsed"/>
                        <Condition SourceName="sortButtonContainer" Property="Visibility" Value="Collapsed"/>
                     </MultiTrigger.Conditions>
                     <Setter TargetName="toolsContainer" Property="Visibility" Value="Collapsed" />
                  </MultiTrigger>
               </ControlTemplate.Triggers>
            </ControlTemplate>
         </Setter.Value>
      </Setter>
   </Style>

</ResourceDictionary>
